// 可变参数
#include <stdio.h>
#include <stdarg.h>
// 头文件stdarg.h定义了一些宏，可以操作可变参数。
// （1）va_list：一个数据类型，用来定义一个可变参数对象。它必须在操作可变参数时，首先使用。
// （2）va_start：一个函数，用来初始化可变参数对象。它接受两个参数，第一个参数是可变参数对象，第二个参数是原始函数里面，可变参数之前的那个参数，用来为可变参数定位。
// （3）va_arg：一个函数，用来取出当前那个可变参数，每次调用后，内部指针就会指向下一个可变参数。它接受两个参数，第一个是可变参数对象，第二个是当前可变参数的类型。
// （4）va_end：一个函数，用来清理可变参数对象。
double average(int i, ...)
{
    double total = 0;
    va_list ap;
    va_start(ap, i);
    for (int j = 1; j <= i; ++j)
    {
        total += va_arg(ap, double);
    }
    va_end(ap);
    return total / i;
}
void main()
{
    printf("average = %f\n", average(3, 1.0, 2.0, 3.0));
}